※以下內容皆是新手撰寫,內容可能不完全正確
(查陌生單字花的時間加起來已經比理解所述內容多太多了(Q_Q))
類型轉換(或型式/型態轉換,Type Conversion) 是將一種型式的資料轉成另一種,也稱作型別轉換(Type Casting),分兩種型態:隱含類型轉換與明確類型轉換。
隱含類型轉換(implicit type conversion)
隱含類型轉換是C#以型式安全(type-safe)的方式進行轉換,像是把小的積分類型(integral types)轉換成大的,或是將衍生類別(derived classes)轉換成基礎類別(base classes)。舉例,int可以轉換成double,因為當中不會有資料損失,可是能儲存較多資料的double卻不能用這個方法轉換成儲存較少資料的int。
int d = 7;
double b = d;
明確類型轉換(explicit type conversion)
明確類型轉換是使用者用已定義的涵式(predefined functions)進行類型轉換,必須使用鑄型運算子(cast operator)。鑄型運算子能強行將一種資料轉換成另一種,這時候double便能夠轉換成int,而這類的運算子用 ( ) 在欲轉換之資料作前綴,並在括號內(如下)。
double yee = 9487.87;
int dinosaur;
dinosaur = (int)yee;
Console.WriteLine(dinosaur);
上面這串執行後會輸出(取整數):
9487
以下是用ToString轉換方法的例子:
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int x = 180;
double y = 948787.87;
bool z = false;
Console.WriteLine(x.ToString());
Console.WriteLine(y.ToString());
Console.WriteLine(z.ToString());
}
}
}
執行以上會輸出:
180
948787.87
False //這個false的f變大寫了
再來是int.Parse和Convert.ToInt32方法(把string變成int)的例子:
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string a = "87";
string b = "100";
Console.WriteLine(int.Parse(a));
Console.WriteLine(Convert.ToInt32(b));
}
}
}
執行這些會輸出:
87
100
Convert.ToInt32和Parse的差別在於Convert.ToInt32以物件作為其值,且Convert.ToInt32不會在值是null的時候丟出ArgumentNullException(某個不該是null的值是null時)。
下面是C#所有內建的轉換方法:
https://docs.microsoft.com/en-us/dotnet/api/system.convert?view=netframework-4.7.2
參考資料:
(a) Tutorialspoint; C# - Type Conversion
https://www.tutorialspoint.com/csharp/csharp_type_conversion.htm
(b) Codecademy; Learn C#
https://www.codecademy.com/courses/learn-c-sharp
(c) Microsoft; Convert Class
https://docs.microsoft.com/en-us/dotnet/api/system.convert?view=netframework-4.7.2
(d) StackOverflow; What's the main difference between int.Parse() and Convert.ToInt32
https://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and-convert-toint32